﻿package core.drawing
{
    import core.enum.*;
    import core.image.*;
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;

    final public class BloatTool extends Tool
    {
        var target:BitmapData;
        var source:BitmapData;

        public function BloatTool(param1:Tuyitu)
        {
            super(param1, ToolType.Bloat, false);
            return;
        }// end function

        override public function Reset() : void
        {
            type.attitude.locked = Boolean(ed.canvas.layer.type != LayerType.Bitmap);
            if (AppState.OnCanvas)
            {
                ed.cursor.Set(type);
            }
            ed.options.SetTool(type);
            return;
        }// end function

        override public function MouseDown(event:MouseEvent) : void
        {
            var _loc_2:BitmapData = null;
            var _loc_3:BitmapData = null;
            var _loc_4:Point = null;
            var _loc_5:Point = null;
            var _loc_6:Number = NaN;
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_9:Number = NaN;
            var _loc_10:Number = NaN;
            var _loc_11:int = 0;
            var _loc_12:int = 0;
            if (!type.attitude.locked)
            {
                this.UpdateReferences();
                history.Prepare(Action.BloatTool);
                _loc_2 = layer.activeBitmap;
                _loc_3 = layer.activeBitmap.clone();
                _loc_4 = canvas.GetOffsetMousePosition(layer.offset);
                _loc_5 = layer.offset;
                _loc_10 = options.size / 2;
                _loc_11 = -_loc_10;
                while (_loc_11 < _loc_10)
                {
                    
                    _loc_12 = -_loc_10;
                    while (_loc_12 < _loc_10)
                    {
                        
                        if (selection == null || selection.IsSelected(_loc_4.x + _loc_12 + _loc_5.x, _loc_4.y + _loc_11 + _loc_5.y))
                        {
                            _loc_9 = Math.sqrt(_loc_11 * _loc_11 + _loc_12 * _loc_12);
                            _loc_8 = 1 - _loc_9 / _loc_10;
                            if (_loc_8 > 0)
                            {
                                _loc_8 = 1 - options.strength * _loc_8 * _loc_8;
                                _loc_6 = _loc_12 * _loc_8;
                                _loc_7 = _loc_11 * _loc_8;
                                _loc_2.setPixel32(_loc_4.x + _loc_12, _loc_4.y + _loc_11, Misc.Antialias(_loc_3, _loc_4.x + _loc_6, _loc_4.y + _loc_7));
                            }
                        }
                        _loc_12++;
                    }
                    _loc_11++;
                }
                canvas.UpdateAfterEdit();
                history.Commit();
            }
            return;
        }// end function

    }
}
